package vip.ifmm.lehouse.email.service.api;

import vip.ifmm.lehouse.common.dto.ServerResponse;

import java.util.concurrent.Future;

/**
 * 邮件服务 API 接口
 *
 * @author Fish
 * <p>Email: fishinlove@163.com</p>
 * <p>created by 2019/06/17 21:17:48</p>
 */
public interface EmailSenderService {

    /**
     * 发送文本邮件，内容将以简单文本的形式来发送
     * 注意：由于邮件服务比较耗时，最好使用异步的方法调用，以免远程调用超时
     *
     * @param receiver 收件人
     * @param topic    邮件主题
     * @param content  邮件内容
     */
    @Deprecated
    ServerResponse<Object> sendTextEmail(String receiver, String topic, String content);

    /**
     * 发送文本邮件，内容将以简单文本的形式来发送
     * 注意：由于邮件服务比较耗时，最好使用异步的方法调用，以免远程调用超时
     *
     * @param receivers 收件人们
     * @param topic     邮件主题
     * @param content   邮件内容
     */
    @Deprecated
    ServerResponse<Object> sendTextEmail(String[] receivers, String topic, String content);

    /**
     * 发送 HTML 邮件，内容将以 HTML 的 MIME 类型来发送
     * 注意：由于邮件服务比较耗时，最好使用异步的方法调用，以免远程调用超时
     *
     * @param toWho   收件人
     * @param topic   邮件主题
     * @param content 邮件内容
     */
    @Deprecated
    ServerResponse<Object> sendHtmlEmail(String toWho, String topic, String content);

    /**
     * 发送 HTML 邮件，内容将以 HTML 的 MIME 类型来发送
     * 注意：由于邮件服务比较耗时，最好使用异步的方法调用，以免远程调用超时
     *
     * @param receivers 收件人们
     * @param topic     邮件主题
     * @param content   邮件内容
     */
    @Deprecated
    ServerResponse<Object> sendHtmlEmail(String[] receivers, String topic, String content);

    /**
     * 发送文本邮件，内容将以简单文本的形式来发送
     * 注意：这个方法是异步的！
     *
     * @param receiver 收件人
     * @param topic    邮件主题
     * @param content  邮件内容
     */
    ServerResponse<Future<?>> sendTextEmailAsync(String receiver, String topic, String content);

    /**
     * 发送文本邮件，内容将以简单文本的形式来发送
     * 注意：这个方法是异步的！
     *
     * @param receivers 收件人们
     * @param topic     邮件主题
     * @param content   邮件内容
     */
    ServerResponse<Future<?>> sendTextEmailAsync(String[] receivers, String topic, String content);

    /**
     * 发送 HTML 邮件，内容将以 HTML 的 MIME 类型来发送
     * 注意：这个方法是异步的！
     *
     * @param receiver   收件人
     * @param topic   邮件主题
     * @param content 邮件内容
     */
    ServerResponse<Future<?>> sendHtmlEmailAsync(String receiver, String topic, String content);

    /**
     * 发送 HTML 邮件，内容将以 HTML 的 MIME 类型来发送
     * 注意：这个方法是异步的！
     *  @param receivers 收件人们
     * @param topic     邮件主题
     * @param content   邮件内容
     * @return
     */
    ServerResponse<Future<?>> sendHtmlEmailAsync(String[] receivers, String topic, String content);
}
